home *** CD-ROM | disk | FTP | other *** search
/ Amiga News 95 / Amiga News 95.iso / dpat / dpat62 / chipmemfirst / chipmemfirst.asm < prev    next >
Assembly Source File  |  1994-05-12  |  14KB  |  689 lines

  1.         ********************
  2.         * ChipMemFirst.asm *
  3.         ********************
  4.  
  5.         COMMENT    /
  6. ChipMemfirst a été assemblé avec le Macro68 © DigiSoft. 
  7. Pour assembler avec un autre assembleur, il suffit de changer les directives 
  8. propres au Macro68 (voir la fin du source pour de plus amples informations).
  9. L'installation du code résident est basée sur celle de NTSC-PAL © Nico
  10. Francois (Fish 331).
  11.             /
  12.  
  13.         MC68000
  14.         EXEOBJ
  15.         OBJFILE ChipMemFirst
  16.         STRICT
  17.         NEWSYNTAX
  18.         MULTIPASS
  19.         ESCAPESTR
  20. ;        VERBOSEOPTIM
  21.  
  22.         INCPATH includes:
  23.         MACFILE libmacs.i
  24.  
  25. INTUITION_ERROR        EQU    0
  26. DOS_ERROR        EQU    1
  27. ICON_ERROR        EQU    2
  28. MSG_ALREADY        EQU    3
  29. MSG_NOMEM        EQU    4
  30. MSG_INSTALLED        EQU    5
  31. MSG_NOINSTALLED        EQU    6
  32. MSG_REMOVED        EQU    7
  33. MSG_NOFASTRAM        EQU    8
  34. MSG_INVALIDE        EQU    9
  35. MSG_INFERIOR        EQU    10
  36.  
  37.  
  38.     STRUCTURE LocaleInfo,0
  39.         APTR li_LocaleBase
  40.         APTR li_Catalog
  41.     LABEL LocaleInfo_SIZEOF
  42.  
  43. _LVOOpenCatalogA    EQU    -150 
  44. _LVOCloseCatalog    EQU    -36 
  45. _LVOGetCatalogStr    EQU    -72 
  46.  
  47. pushm        MACRO
  48. reglist        setrl \1
  49.         movem.l reglist,-(SP)
  50.         ENDM
  51.  
  52. popm        MACRO
  53.         movem.l (SP)+,reglist
  54.         ENDM        
  55.  
  56. MESSAGE        MACRO
  57.         IFC    'locale',\1
  58.         moveq    #\2,d0
  59.         lea    (localeinfo),a0
  60.         bsr.w    GetString
  61.         movea.l    d0,a0
  62.         ELSE
  63.         lea    (\1.msg),a0
  64.         ENDC
  65.         tst.b    (fromWB)
  66.         beq.b    fromCLI\@
  67.         lea    (myRequest),a1
  68.         move.l    a0,(es_TextFormat,a1)
  69.         suba.l    a0,a0
  70.         movea.l    a0,a2
  71.         movea.l a0,a3
  72.         move.l    (_IntuitionBase),d0
  73.         beq.b    endMess\@
  74.         movea.l    d0,a6
  75.         CALL    EasyRequestArgs
  76.         bra.b    endMess\@
  77.  
  78. fromCLI\@
  79.         move.l    a0,d1
  80.         move.l    (_DOSBase),d0
  81.         beq.b    endMess\@
  82.         movea.l    d0,a6
  83.         CALL    PutStr
  84. endMess\@
  85.         ENDM
  86.  
  87. _custom     EQU    $dff000    
  88.     
  89. MAXPRI        EQU    60
  90. ;VERSION_2_0    EQU    37
  91.  
  92.         SECTION ChipMemFirst,CODE
  93.  
  94.         include mystartup.i
  95.  
  96.         moveq    #RETURN_FAIL,d7
  97.  
  98.         lea    (LocaleName),a1
  99.         moveq    #0,d0
  100.         CALL    OpenLibrary
  101.         move.l    d0,(_LocaleBase)
  102.         beq.w    noLocale
  103.  
  104.                 movea.l  d0,a6
  105.                 suba.l  a0,a0
  106.                 movea.l a0,a2
  107.                 lea     (CatalogName),a1
  108.                 CALL    OpenCatalogA    
  109.         lea    (localeinfo),a0
  110.         move.l    a6,(a0)+
  111.                 move.l  d0,(a0)
  112.  
  113.         lea    (IntuitionName),a1
  114.         moveq    #37,d0
  115.         CALL    _SysBase,OpenLibrary
  116.         move.l    d0,(_IntuitionBase)
  117.         beq.w    noInt    
  118.  
  119.         lea    (DosName),a1
  120.         moveq    #37,d0
  121.         CALL    OpenLibrary
  122.         move.l    d0,(_DOSBase)
  123.         beq.w    noDOS
  124.  
  125.         lea    (IconName),a1
  126.         moveq    #37,d0
  127.         CALL    OpenLibrary
  128.         move.l    d0,(_IconBase)
  129.         beq.w    noIcon
  130.  
  131.         lea    (MemList,a6),a0
  132.         lea    (FastRAM.txt),a1
  133.         CALL    FindName    
  134.         bne.b    FastRamExist
  135.         MESSAGE    <locale>,MSG_NOFASTRAM
  136.         bra.w    Exit
  137.  
  138. FastRamExist    moveq    #0,d6
  139.         movea.l    d0,a0    
  140.         move.b    (LN_PRI,a0),d6
  141.  
  142.         tst.b    (fromWB)
  143.         beq.w    CLIStart
  144.         bra.w    Remove
  145.  
  146. WBInstall    bsr.w    ReadWBArgs
  147.         move.l    (rdargs.pri),d0
  148.         beq.w    Defaut
  149.         movea.l    d0,a0
  150.         lea    (newpri),a1
  151.         bsr.w    DecString2Long
  152.         move.l    (a1),d0
  153.         bne.b    ValidePri
  154.         MESSAGE    <locale>,MSG_INVALIDE    
  155.         bra.w    Exit    
  156.  
  157. ValidePri    cmp.l    d6,d0
  158.         bgt.b    OK    
  159.         MESSAGE    <locale>,MSG_INFERIOR
  160.         bra.w    Exit    
  161.     
  162. OK        cmpi.l    #MAXPRI,d0
  163.         bhi.b    Defaut        
  164.         move.b    d0,(defautpri)    
  165. Defaut        bra.w    Install
  166.  
  167. CLIStart    MESSAGE    hello
  168.  
  169.         move.l    #template,d1
  170.         move.l    #rdargs.install,d2
  171.         moveq    #0,d3
  172.         CALL    _DOSBase,ReadArgs
  173.         move.l    d0,(rdargs)
  174.         bne.b    ArgOk    
  175.         
  176.         tst.l    (rdargs.remove)
  177.         bne.w    Remove
  178.  
  179.         MESSAGE <locale>,MSG_INVALIDE
  180.         tst.l    (rdargs.install)
  181.         bne.w    Quit
  182.  
  183.         bra.w    Help
  184.  
  185. ArgOk        tst.l    (rdargs.help)
  186.         beq.b    noHelp    
  187.  
  188.         bra.w    Help
  189.  
  190. noHelp        tst.l    (rdargs.remove)
  191.         bne.w    Remove
  192.  
  193.         tst.l    (rdargs.pri)
  194.         beq.b    nopri
  195.  
  196.         movea.l    (rdargs.pri),a0
  197.         move.l    (a0),d0
  198.         cmp.l    d6,d0    
  199.         bgt.b    priOK
  200.  
  201.         MESSAGE    <locale>,MSG_INFERIOR
  202.         tst.l    (rdargs.install)
  203.         bne.b    Quit
  204.  
  205.         bra.b    Help
  206.  
  207. priOK        cmpi.l    #MAXPRI,d0
  208.         bhi.b    nopri
  209.         move.b    d0,(defautpri)
  210. nopri        tst.l    (rdargs.install)
  211.         bne.w    Install
  212.  
  213. Help        MESSAGE    usage
  214. Quit        move.l    (rdargs),d1
  215.         beq.b    Exit
  216.  
  217.              CALL    _DOSBase,FreeArgs
  218.              
  219. Exit        movea.l    (_IconBase),a1
  220.         CALL    _SysBase,CloseLibrary
  221.         movea.l    (_DOSBase),a1
  222.         CALL    CloseLibrary
  223.         movea.l (_IntuitionBase),a1
  224.         CALL    CloseLibrary
  225.         lea    (localeinfo),a0
  226.         movea.l    (a0)+,a6
  227.         movea.l    (a0),a0
  228.                 CALL    CloseCatalog
  229.         movea.l    a6,a1
  230.         CALL    _SysBase,CloseLibrary
  231.         moveq    #0,d0
  232.         rts
  233.  
  234. noIcon        MESSAGE    <locale>,ICON_ERROR
  235.         movea.l (_DOSBase),a1
  236.         CALL    _SysBase,CloseLibrary
  237.     
  238. ;-------------- Big problème si cette partie est exécutée sous
  239. ;-------------- Kickstart V37 et +.    
  240. ;\\\\\\\\\\\\\\
  241. noDOS        MESSAGE    <locale>,DOS_ERROR
  242.         movea.l    (_IntuitionBase),a1
  243.         CALL    _SysBase,CloseLibrary
  244.  
  245. noInt        MESSAGE    <locale>,INTUITION_ERROR
  246.         lea    (localeinfo),a0
  247.         movea.l    (a0)+,a6
  248.         movea.l    (a0),a0
  249.                 CALL    CloseCatalog
  250.         movea.l    a6,a1
  251.         CALL    _SysBase,CloseLibrary    
  252. ;\\\\\\\\\\\\\\
  253. noLocale    move.l d7,d0
  254.         rts
  255. ;--------------
  256. GetString
  257.         lea    (CatCompBlock),a1
  258.         bra.b    2$
  259. 1$:        move.w    (a1)+,d1
  260.         adda.w    d1,a1
  261. 2$:        cmp.l    (a1)+,d0
  262.         bne.b    1$
  263.         addq.l    #2,a1
  264.         move.l    (a0)+,d1
  265.         bne.b    3$
  266.         move.l    a1,d0
  267.         rts
  268. 3$:        move.l    a6,-(SP)
  269.         movea.l    d1,a6
  270.         movea.l    (a0),a0
  271.         CALL    GetCatalogStr
  272.         movea.l    (SP)+,a6
  273.         rts
  274. ;--------------
  275. ReadWBArgs
  276.         pushm    d2/a2-a3
  277.         movea.l    (_WBMsg),a0
  278.         movea.l    (sm_ArgList,a0),a2
  279.         move.l    (wa_Lock,a2),d1
  280.         CALL    _DOSBase,CurrentDir
  281.         move.l    d0,d2
  282.         movea.l    (wa_Name,a2),a0
  283.         CALL    _IconBase,GetDiskObject
  284.         tst.l    d0
  285.         beq.b    .noTools
  286.         movea.l    d0,a0
  287.         movea.l    a0,a2
  288.         movea.l    (do_ToolTypes,a0),a0
  289.         lea    (ToolPri.txt),a1
  290.         CALL    FindToolType
  291.         tst.l    d0
  292.         beq.b    .noPri
  293.         movea.l    d0,a0
  294.         lea    (DecBuffer),a1
  295.         movea.l    a1,a3
  296. ..        move.b    (a0)+,(a1)+
  297.         bne.b    ..
  298.         move.l    a3,(rdargs.pri)    
  299. .noPri        movea.l    a2,a0
  300.         CALL    FreeDiskObject    
  301. .noTools    move.l    d2,d1
  302.         CALL    _DOSBase,CurrentDir
  303.         popm
  304.         rts
  305.  
  306. ;-------------- a1: en entrée, pointeur sur le nombre décimal à obtenir
  307. ;-------------- a0: en entrée, pointeur sur la chaine à convertir
  308. ;-------------- a1: en sortie, contient soit un décimal valide ou 0
  309. DecString2Long    
  310.         pushm    d2-d3
  311.         moveq    #0,d0
  312.         move.l    d0,d1
  313.         move.l    d0,d3
  314.         cmpi.b    #'+',(a0)
  315.         beq.b    .sign
  316.         cmpi.b    #'-',(a0)
  317.         bne.b    .nosign
  318.         moveq    #1,d3
  319. .sign        addq.w    #1,a0    
  320. .nosign    
  321. .loop        move.b    (a0)+,d0
  322.         beq.b    .OK
  323.         subi.b    #'0',d0
  324.         blt.b    .nonumber
  325.         cmpi.b    #9,d0
  326.         bgt.b    .nonumber
  327.         move.l    d1,d2
  328.         asl.l    #2,d1        ;\
  329.         add.l    d2,d1        ; 10 * d1
  330.         add.l    d1,d1        ;/
  331.         tst.b    d3
  332.         bne.b    .negative
  333.         add.l    d0,d1
  334.         bra.b    .loop
  335. .negative    sub.l    d0,d1
  336.         bra.b    .loop
  337. .nonumber    clr.l    (a1)
  338.         bra.b    .END
  339. .OK        move.l    d1,(a1)
  340. .END        popm
  341.         rts
  342. ;--------------
  343. Install    
  344.         lea    (PortName,pc),a1
  345.         CALL    _SysBase,FindPort
  346.         tst.l    d0
  347.         beq.b    Alloc
  348.         MESSAGE    <locale>,MSG_ALREADY
  349.         bra.w    Quit
  350.  
  351. Alloc        movea.l    (_SysBase),a6
  352.         moveq    #256-ResidentLen,d0
  353.         neg.b    d0
  354.  
  355. ;-------------- Romtag possible en fast MEM à partir de l'OS 2.0
  356. ;-------------- mais doit résister à un RESET (mémoire sur carte-mère)
  357.  
  358. ;        move.w    (LIB_VERSION,a6),d2        
  359. ;        cmp.w    #VERSION_2_0,d2
  360. ;        bcs.b    .noOS2    
  361.         move.l    #MEMF_LOCAL,d1
  362. ;        bra.b    .OS2
  363.  
  364. ;.noOS2        move.l    #MEMF_CHIP,d1         
  365.                         
  366. .OS2        CALL    AllocMem
  367.         tst.l    d0
  368.         bne.b    MemOk
  369.         MESSAGE    <locale>,MSG_NOMEM
  370.         bra.w    Quit
  371.  
  372. MemOk        movea.l    d0,a5
  373.         lea    (ResidentBlock,pc),a0
  374.         movea.l    d0,a1
  375.         moveq    #256-ResidentLen,d0
  376.         neg.b    d0
  377.         CALL    CopyMem
  378.  
  379. ;-------------- Macro DISABLE        
  380. ;        move.w    #INTF_INTEN,(_custom+intena)    
  381. ;        addq.b    #1,(IDNestCnt,a6)    
  382.         CALL    Disable    
  383.  
  384.         lea    (RomTagPtrs-ResidentBlock,a5),a0
  385.         move.l    (KickTagPtr,a6),(4,a0)
  386.         beq.b    .noTag
  387.         bset    #7,(4,a0)
  388.  
  389. .noTag        move.l    a0,(KickTagPtr,a6)
  390.         lea    (RomTag-ResidentBlock,a5),a1
  391.         move.l    a1,(a0)
  392.         lea     (myMemList-ResidentBlock,a5),a1
  393.         move.l    a5,(ML_SIZE+ME_ADDR,a1)
  394.         move.l    (KickMemPtr,a6),d0
  395.         move.l    d0,(LN_SUCC,a1)
  396.         move.l    a1,(KickMemPtr,a6)
  397.  
  398.         lea    (RomTag-ResidentBlock,a5),a1
  399.         move.l    a1,(RT_MATCHTAG,a1)
  400.         lea    (RT_SIZE,a1),a2
  401.         move.l    a2,(RT_ENDSKIP,a1)
  402.         lea    (TagName-ResidentBlock,a5),a2
  403.         move.l    a2,(RT_NAME,a1)
  404.         move.l    a5,(RT_INIT,a1)
  405.         CALL    SumKickData
  406.  
  407.         move.l    d0,(KickCheckSum,a6)
  408.         lea    (Port-ResidentBlock,a5),a1
  409.         lea    (PortName-ResidentBlock,a5),a0
  410.         move.l    a0,(LN_NAME,a1)
  411.         CALL    AddPort
  412.  
  413. ;-------------- Macro ENABLE
  414. ;        subq.b    #1,(IDNestCnt,a6)            
  415. ;        bge.b    .noenable
  416. ;        move.w    #INTF_SETCLR|INTF_INTEN,(_custom+intena)
  417.         CALL    Enable
  418.  
  419. .noenable    MESSAGE    <locale>,MSG_INSTALLED
  420.         bra.w    Quit
  421. ;--------------
  422. Remove
  423.         lea    (PortName,pc),a1
  424.         CALL    _SysBase,FindPort
  425.         tst.l    d0
  426.         bne.b    FoundPort
  427.         tst.b    (fromWB)
  428.         bne.w    WBInstall
  429.         MESSAGE    <locale>,MSG_NOINSTALLED
  430.         bra.w    Quit
  431. FoundPort
  432.         movea.l    d0,a4
  433.         movea.l    a4,a1
  434.         CALL    RemPort
  435.  
  436. ;-------------- DISABLE    
  437. ;        move.w    #INTF_INTEN,(_custom+intena)
  438. ;        addq.b    #1,(IDNestCnt,a6)
  439.         CALL    Disable
  440.  
  441.         lea    (myMemList-Port,a4),a1
  442.         lea    (KickMemPtr,a6),a0
  443. .nextnode    move.l    (LN_SUCC,a0),d0
  444.         cmpa.l    d0,a1
  445.         beq.b    .foundmylist
  446.         movea.l    d0,a0
  447.         bra.b    .nextnode
  448.  
  449. .foundmylist    move.l    (LN_SUCC,a1),d0
  450.         move.l    d0,(LN_SUCC,a0)
  451.  
  452.         move.l    (RomTagPtrs-Port+4,a4),(KickTagPtr,a6)
  453.         beq.b    .noclr
  454.         bclr    #7,(KickCheckSum,a6)
  455. .noclr        CALL    SumKickData
  456.         move.l    d0,(KickCheckSum,a6)
  457.  
  458. ;-------------- ENABLE
  459. ;        subq.b    #1,(IDNestCnt,a6)
  460. ;        bge.b    .noenable
  461. ;        move.w    #INTF_SETCLR|INTF_INTEN,(_custom+intena)
  462.         CALL    Enable
  463.  
  464. .noenable    lea    (ResidentBlock-Port,a4),a1
  465.         moveq    #256-ResidentLen,d0
  466.         neg.b    d0
  467.         CALL    FreeMem
  468.         MESSAGE    <locale>,MSG_REMOVED
  469.         bra.w     Quit
  470. ;--------------
  471. ResidentBlock
  472.         pushm    d0-d7/a0-a6
  473.         movea.l    ($4).W,a6
  474.         lea    (Port,PC),a1
  475.         lea    (PortName,PC),a0
  476.         move.l    a0,(LN_NAME,a1)
  477.         CALL    AddPort
  478.  
  479.         lea    (MemList,a6),a0
  480.         movea.l    a0,a4
  481.         lea    (ChipName,PC),a1
  482.         CALL    FindName    
  483.         beq.b    .nofind
  484.         movea.l    d0,a3
  485.         movea.l    d0,a1
  486.         CALL    Remove
  487.         movea.l    a3,a1
  488.         movea.l    a4,a0
  489.         move.b    (defautpri,PC),(LN_PRI,a1)
  490.         CALL    Enqueue    
  491.         ori.b    #LIBF_CHANGED,(LIB_FLAGS,a6)
  492.         movea.l    a6,a1
  493.         CALL    SumLibrary
  494. .nofind        popm
  495.         rts
  496.  
  497. RomTagPtrs    dc.l    0,0
  498. PortName    cstr    "ChipMemFirst.port"
  499. TagName        cstr    "ChipMemFirt.tag"
  500. ChipName    cstr    "chip memory"
  501.         EVEN
  502.  
  503. myMemList    ds.b    LN_SIZE
  504.         dc.w    1
  505.         dc.l    0
  506.         dc.l    ResidentLen
  507.  
  508. Port        dc.l     0
  509.         dc.l     0
  510.         dc.b     NT_MSGPORT
  511.         dc.b     0
  512.         dc.l     0
  513.         dc.b     0
  514.         dc.b     0
  515.         dc.l     0
  516.         ds.b     LH_SIZE
  517.  
  518. RomTag        dc.w    RTC_MATCHWORD
  519.         dc.l    0
  520.         dc.l    0
  521.         dc.b    RTF_COLDSTART
  522.         dc.b    1
  523.         dc.b    0
  524.         dc.b    -10
  525.         dc.l    0
  526.         dc.l    0
  527.         dc.l    0
  528.  
  529. defautpri    dc.b    35
  530.  
  531. ResidentLen     equ    *-ResidentBlock
  532.  
  533.             SECTION    ChipMemFirst1,BSS
  534.  
  535. _DOSBase        ds.l    1
  536. _IntuitionBase        ds.l    1
  537. _SysBase        ds.l    1
  538. _LocaleBase        ds.l    1
  539. _IconBase        ds.l    1
  540. _WBMsg            ds.l    1
  541. rdargs            ds.l    1
  542. rdargs.install        ds.l    1
  543. rdargs.remove        ds.l    1
  544. rdargs.help        ds.l    1
  545. rdargs.pri        ds.l    1
  546. newpri            ds.l    1
  547. DecBuffer        ds.l    8
  548. localeinfo        ds.b    LocaleInfo_SIZEOF
  549. fromWB            ds.b    1
  550.  
  551.             SECTION    ChipMemFirst2,DATA
  552.  
  553. myRequest        dc.l    es_SIZEOF
  554.             dc.l    0
  555.             dc.l    title
  556.             dc.l    0
  557.             dc.l    format
  558.  
  559. title            cstr    "ChipMemFirst"
  560. format            cstr    "OK"
  561. DosName            cstr    "dos.library"
  562. IntuitionName        cstr    "intuition.library"
  563. LocaleName        cstr    "locale.library"
  564. IconName        cstr    "icon.library"
  565. CatalogName        cstr    "chipmemfirst.catalog"
  566. FastRAM.txt        cstr    "expansion memory"
  567. ToolPri.txt        cstr    "PRI"
  568. version            cstr    "$VER: ChipMemFirst 1.02 (13.2.94)"
  569. usage.msg        dc.b    "Usage: ChipMemFirst "    
  570. template        dc.b     "I=INSTALL/S,"
  571.             dc.b    "R=REMOVE/S,"
  572.             dc.b    "?=HELP/S,"
  573.             dc.b    "PRI/N"
  574.             dc.b    10,10,0
  575. hello.msg        dc.b    10
  576.             dc.b    '\C1;33m'
  577.             dc.b    "ChipMemFirt © Pat (13/02/94)"
  578.             dc.b    '\C0;39m',10,10,0        
  579.  
  580.             SECTION Localized,DATA
  581.  
  582. CatCompBlock
  583.             DC.L $0
  584.             DC.W $20
  585.             DC.B 'Can',39,'t find intuition.library.',10,10,$00
  586.             DC.L $1
  587.             DC.W $1A
  588.             DC.B 'Can',39,'t find dos.library.',10,10,$00
  589.             DC.L $2
  590.             DC.W $1C
  591.             DC.B 'Can',39,'t find icon.library.',10,10,$00,$00
  592.             DC.L $3
  593.             DC.W $22
  594.             DC.B 'ChipMemFist is already running.',10,10,$00
  595.             DC.L $4
  596.             DC.W $18
  597.             DC.B 'No memory for romtag.',10,10,$00
  598.             DC.L $5
  599.             DC.W $28
  600.             DC.B 'ChipMemFirst is ready, reboot please.',10,10,$00
  601.             DC.L $6
  602.             DC.W $22
  603.             DC.B 'ChipMemfirst is not installed.',10,10,$00,$00
  604.             DC.L $7
  605.             DC.W $28
  606.             DC.B 'ChipMemFirst removed, reboot please.'
  607.             DC.B 10,10,$00,$00
  608.             DC.L $8
  609.             DC.W $16
  610.             DC.B 'Sorry, no fast mem.',10,10,$00
  611.             DC.L $9
  612.             DC.W $32
  613.             DC.B 'Your prioritie is not a valide decimal number.'
  614.             DC.B 10,10,' ',$00
  615.             DC.L $A
  616.             DC.W $34
  617.             DC.B 'Your prioritie is lower than fast ram prioritie.'
  618.             DC.B 10,10,' ',$00,$00
  619.     
  620.             END
  621.  
  622. Directives:     MC68000 -> type processeur/instructions 
  623.         EXOBJ ->  executable
  624.         OBJFILE -> nom du fichier généré lors de l'assemblage.
  625.             <-> OUTPUT
  626.         STRICT -> utilise la syntaxe précise des instructions.
  627.         exemples:   sub.l a0,a0 -> suba.l a0,a0
  628.                 move.l d1,a1 -> movea.l d1,a1
  629.                 cmp.w #2,d0 -> cmpi.w #2,d0
  630.         Le contaire étant le mode RELAX.
  631.         NEWSYNTAX -> utilise la nouvelle syntaxe definie par
  632.                  MOTOROLA pour l'ensemble de la gamme 68000.
  633.         exemples:   move.l $4.w,a6 -> movea.l ($4).w,a6
  634.                 move.l d0,_GfxBase -> move.l d0,(_GfxBase)
  635.                 move.l d0,8(a2) -> move.l d0,(8,a2)
  636.                 beq.s -> beq.b
  637.                 bra.l -> bra.w
  638.         Le contraire étant OLDSYNTAX.
  639.         MULTIPASS -> passes d'optimisation.
  640.         INCPATH <-> INCDIR
  641.         MACFILE    <-> INCLUDE    
  642.         ESCAPESTR -> permet d'intoduire des séquences d'échappement
  643.                  dans une chaine de caractères.
  644.                  DC.B "chaine\N",0 -> DC.B "chaine",10,0
  645.  
  646.         SETRL -> définie une liste provisoire de registres.
  647.         CSTR "chaine" -> DC.B "chaine",0
  648.         COMMENT -> commentaire sans * et ;.
  649.         VERBOSEOPTIM -> phase d'optimisation dans le code source.
  650.                 
  651. Utilisation: pour des demos ou jeux qui supposent que vous avez que de
  652. la chip ram. 
  653. Mais ATTENTION, la chip ram est très précieuse car non expansible.
  654. A par celles avec l'attribut MEMF_FAST, toutes les allocations
  655. se font en chip ram. 
  656. De plus les accès en chip ram pour un A4000/040 sont très lents
  657. (Par rapport à un A1200 de base, un A4000/040 est 30 à 40 % plus lent lors
  658. des accès en chip ram). 
  659. Par conséquent, ChipMemFirst est à utiliser à bon escient.
  660.  
  661. ChipMemFirst fonctionne à partir de l'AmigaDos 2.1.
  662. chipmemfirst.catalog est à installé dans PROGDIR:catalogs/français ou
  663. dans LOCALE:catalogs/français.
  664. A partir du CLI, la syntaxe de ChipMemFirst est la suivante:
  665.     ChipMemFirst i=install [pri]
  666.     ChipMemFirst ?=help
  667.     ChipMemFirst r=remove
  668. A partir du Workbench, un premier double-clic installe le code résident.
  669. Un tooltype PRI=valeur peut exister dans ChipMemFirst.info.
  670. Un second double-click, enlève ce code résident. 
  671.  
  672. ChipMemFirst est librement distribuable mais sans une seule modification 
  673. et dans son intégralité.
  674. liste des fichiers fournis:    ChipMemFirst
  675.                 ChipMemfirst.info
  676.                 ChipMemfirst.asm
  677.                 mystartup.i
  678.                 libmacs.i
  679.                 chipmemfirst.cd
  680.                 empty.ct
  681.                 français.ct
  682.                 chipmemfirst.catalog
  683.                 CMF_strings.asm
  684.  
  685. Contacts:    RAULT Patrice
  686.         1, rue Gabriel Péri
  687.         29200 BREST  
  688.         FRANCE
  689.